package a_direct;

import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import java.io.IOException;
import org.junit.Test;
import utils.RabbitMQUtils;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: 雷哥
 * @Date: 2020/10/06/16:59
 * @Description:消息的消费者
 */
public class Consumer {


  @Test
  public  void sendMessage() throws Exception{
    //1,创建一个连接工厂
//    ConnectionFactory connectionFactory=new ConnectionFactory();
//    //2,设置相关的参数
//    connectionFactory.setHost("116.62.44.5");
//    connectionFactory.setPort(5672);
//    connectionFactory.setUsername("sxt");
//    connectionFactory.setPassword("123456");
//    connectionFactory.setVirtualHost("/v-sxt");
    //3,从连接工厂里面创建一个连接
//    Connection connection = connectionFactory.newConnection();
    Connection connection = RabbitMQUtils.getConnection();
    //4,创建一个通道
    Channel channel = connection.createChannel();
    /**
     * 5,绑定队列
     *
     * 参数1：队列名，如果发送消息时，队列在mq里面不存在，它会创建一个新的队列
     * 参数2：是否持久化 如果为False,当MQ重启时，消息会丢失
     * 参数3：是否独享，true代表只有当前的connection可以访问到这个队列
     * 参数4：是否自动删除，是否用完之后就删这个队列
     * 参数5：其它参数
     */
    channel.queueDeclare("hello",true,false,false,null);

    channel.basicConsume("hello",true,new DefaultConsumer(channel){
      /**
       *
       * @param consumerTag
       * @param envelope
       * @param properties
       * @param body  消息体
       * @throws IOException
       */
      @Override
      public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
          byte[] body) throws IOException {
        System.out.println("消费者接收到消息:"+new String(body));
      }
    });

    //不能让程序结束
    System.in.read();

  }

}
